package com.google.rui.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileUtil {
	/**
	 * 创建目录
	 * @param dir  目录绝对路径
	 */
	public static boolean createDirs(String dir) {
			File file = new File (dir);
		    file.mkdirs();
		    return true;
		  
		}
	
	/**
	 * 复制文件
	 * @param srcFile   源文件
	 * @param destFile  目标文件
	 * @return
	 */
	public static boolean copyFileTo(File srcFile, File destFile)
	{
		if (srcFile.isDirectory() || destFile.isDirectory()){// 判断是否是文件
			System.out.println("源文件或目标文件不可是目录");
			return false;
		}
		FileInputStream fis =null; 
		FileOutputStream fos =null;
		try
		{
			fis=new FileInputStream(srcFile);
			fos=new FileOutputStream(destFile);
			
			int readLen = 0;
			byte[] buf = new byte[1024];
			while ((readLen = fis.read(buf)) != -1)
			{
				fos.write(buf, 0, readLen);
			}
			fos.flush();
		}
		catch (IOException e) {
			return false;
		}
		finally
		{
			if(fos!=null)
				try
				{
					fos.close();
				} catch (IOException e)
				{
					e.printStackTrace();
				}
			if(fis!=null)
				try
				{
					fis.close();
				} catch (IOException e)
				{
					e.printStackTrace();
				}
		}
		return true;
	}
	
	/**
	 * 将一个文件复制到一个文件夹下
	 * 若目标文件夹不存在则创建
	 * @param srcFile  源文件
	 * @param destDir  目标文件夹
	 * @return
	 */
	public static boolean copyFileToDir(File srcFile, File destDir)
	{
        if(!destDir.exists())
        	destDir.mkdirs();
		String name=srcFile.getName();
		File destFile=new File(destDir,"/"+name);
		try {
			destFile.createNewFile();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		if(destFile.exists()){
			if(copyFileTo(srcFile, destFile)){
				return true;
			}
		}
		return false;
	}
	
	/**
	 * 移动一个文件
	 * @param srcFile   源文件
	 * @param destFile  目标文件
	 * @return
	 * @throws IOException
	 */
	public static boolean moveFileTo(File srcFile, File destFile)
	{
		boolean iscopy = copyFileTo(srcFile, destFile);
		if (!iscopy)
			return false;
		delFile(srcFile);
		return true;
	}
	
	/**
	 * 移动目录下的所有文件到指定目录
	 * 
	 * @param srcDir
	 * @param destDir
	 * @return
	 * @throws IOException
	 */
	public static boolean  moveFilesTo(File srcDir, File destDir)
	{
		if(!destDir.exists()){
			System.out.println("目标文件夹不存在");
			return false;
		}
		     
		if (!srcDir.isDirectory() || !destDir.isDirectory())
		{
			return false;
		}
		File[] srcDirFiles = srcDir.listFiles();
		for (int i = 0; i < srcDirFiles.length; i++)
		{
			if (srcDirFiles[i].isFile())
			{
				File oneDestFile = new File(destDir.getPath() + "\\" + srcDirFiles[i].getName());
				moveFileTo(srcDirFiles[i], oneDestFile);
				delFile(srcDirFiles[i]);
			} else if (srcDirFiles[i].isDirectory())
			{
				File oneDestFile = new File(destDir.getPath() + "\\" + srcDirFiles[i].getName());
				moveFilesTo(srcDirFiles[i], oneDestFile);
				delDir(srcDirFiles[i]);
			}
		}
		return true;
	}
	
	
	/**
	 * 删除文件
	 * 
	 * @param file 文件
	 * @return
	 */
	public static boolean delFile(File file)
	{
		if (file.isDirectory())
			return false;
		return file.delete();
	}
	
	/**
	 *  删除文件夹
	 * @param folderPath  文件夹绝对路径
	 */
	public static void delFolder(String folderPath) {
		try {
			delAllFile(folderPath); // 删除完里面所有内容
			String filePath = folderPath;
			filePath = filePath.toString();
			java.io.File myFilePath = new java.io.File(filePath);
			myFilePath.delete(); // 删除空文件夹
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 删除一个目录（可以是非空目录）
	 * 
	 * @param dir
	 */
	public static boolean delDir(File dir)
	{
		if (dir == null || !dir.exists() || dir.isFile())
		{
			return false;
		}
		for (File file : dir.listFiles())
		{
			if (file.isFile())
			{
				file.delete();
			} else if (file.isDirectory())
			{
				delDir(file);// 递归
			}
		}
		dir.delete();
		return true;
	}

	/**
	 * 删除指定文件夹下所有文件
	 * 
	 * @param dirPath  文件夹完整绝对路径
	 *            
	 */
	public static boolean delAllFile(String dirPath) {
		boolean flag = false;
		File file = new File(dirPath);
		if (!file.exists()) {
			return flag;
		}
		if (!file.isDirectory()) {
			return flag;
		}
		String[] tempList = file.list();
		File temp = null;
		for (int i = 0; i < tempList.length; i++) {
			if (dirPath.endsWith(File.separator)) {
				temp = new File(dirPath + tempList[i]);
			} else {
				temp = new File(dirPath + File.separator + tempList[i]);
			}
			if (temp.isFile()) {
				temp.delete();
			}
			if (temp.isDirectory()) {
				delAllFile(dirPath + "/" + tempList[i]);// 先删除文件夹里面的文件
				delFolder(dirPath + "/" + tempList[i]);// 再删除空文件夹
				flag = true;
			}
		}
		return flag;
	}
	
	/**
	 * 移动一个文件到文件夹
	 * @param srcFile  源文件
	 * @param destDir  目标文件夹
	 * @return
	 */
	public static boolean moveFileToDir(File srcFile, File destDir)
	{
		boolean iscopy = copyFileToDir(srcFile, destDir);
		if (!iscopy)
			return false;
		delFile(srcFile);
		return true;
	}
	/**
	 * 计算文件的大小
	 * 
	 * @param f
	 * @return
	 * @throws Exception
	 */
	public static long getFileSize(File f) {
		long size = 0;
		try {
			if (!f.exists())
				return 0;

			File flist[] = f.listFiles();
			for (int i = 0; i < flist.length; i++) {
				if (flist[i].isDirectory()) {
					size = size + getFileSize(flist[i]);
				} else {
					size = size + flist[i].length();
				}
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
		return size;
	}
	
	public static String getFileNameFromUrl(String url) {
		String fileName = "";
		int index = url.lastIndexOf("/");
		if (index != -1) {
			fileName = url.substring(index + 1);
		}
		return fileName;
	}
	
}
